/******************************************************************************
 * Copyright (C) 2025 COMPANY or its affiliates.
 * 
 * All Rights Reserved.
 * 
 @file system.h
 * 
 @par dependencies 
 - ${stdint.h}          // 标准类型定义
 - ${other_common.h}    // 公共宏定义
 * 
 @author liubin | R&D Dept. | COMPANY
 * 
 @brief 模块对外接口声明，包括：
            - 数据结构定义（如xxx结构体）
            - 枚举类型定义（如xxx状态枚举）
            - 函数接口声明（如xxx_init/xxx_process）
 * 
 @version V1.0 2025-11-09
 *
 @note 1 tab == 4 spaces!
Flash地址空间: 0x08000000 - 0x0807FFFF (512KB)

    分区详情:
    ┌─────────────────────────────────────────────────────────────┐
    │ 0x08000000 - 0x08007FFF │ Bootloader (32KB)                  │
    ├─────────────────────────┼────────────────────────────────────┤
    │ 0x08008000 - 0x08067FFF │ Application (384KB)                │
    ├─────────────────────────┼────────────────────────────────────┤
    │ 0x08068000 - 0x0807EFFF │                                    │                    
    ├─────────────────────────┼────────────────────────────────────┤
    │ 0x0807F000 - 0x0807FFFF │ System Configuration (4KB, 1扇区)  │
    └─────────────────────────┴────────────────────────────────────┘
 *
 *****************************************************************************/
/* Define to prevent recursive inclusion -------------------------------------*/

#ifndef SYSTEM_H
#define SYSTEM_H
/* Includes ------------------------------------------------------------------*/
#include <stdint.h>

/* Exported types ------------------------------------------------------------*/
/**
 * @brief 系统状态位域结构体 (32位)
 */
typedef struct {
    uint32_t app_update_status : 2;     // APP更新状态 (0-3)
    uint32_t reserved : 30;             // 保留位
} system_status_t;

/**
 * @brief APP更新状态枚举
 */
typedef enum {
    APP_UPDATE_STATUS_NO_UPDATE = 0,    // 没有APP更新
    APP_UPDATE_STATUS_DOWNLOADING = 1,  // APP数据下载中
    APP_UPDATE_STATUS_REQUEST_UPDATE = 2 // APP请求更新
} app_update_status_e;

/**
 * @brief 系统配置结构体
 */
typedef struct {
    system_status_t status;             // 系统状态 (4字节)
    uint32_t ota_new_app_size;          // OTA新APP字节大小 (4字节)
    uint32_t current_app_size;          // 当前APP字节大小 (4字节)
    uint32_t crc32;                     // CRC校验值 (4字节)
} system_config_t;
/* Exported constants --------------------------------------------------------*/

/* Exported macro ------------------------------------------------------------*/

/* Exported functions ------------------------------------------------------- */
// 系统配置初始化
void system_config_init(void);

// 读取系统配置
uint8_t system_config_read(system_config_t *config);

// 写入系统配置
uint8_t system_config_write(system_config_t *config);

// 设置APP更新状态
uint8_t system_config_set_app_status(app_update_status_e status);

// 设置OTA新APP大小
uint8_t system_config_set_ota_new_app_size(uint32_t size);

// 设置当前APP大小
uint8_t system_config_set_current_app_size(uint32_t size);

// 获取APP更新状态
app_update_status_e system_config_get_app_status(void);

// 获取OTA新APP大小
uint32_t system_config_get_ota_new_app_size(void);

// 获取当前APP大小
uint32_t system_config_get_current_app_size(void);
#endif /* SYSTEM_H */
